#!/bin/bash

set -e

# 默认用户和主目录
USERNAME=${USERNAME:-dev}
USER_UID=${LOCAL_USER_ID:-1000}
USER_GID=${LOCAL_GROUP_ID:-1000}
HOME_DIR="/home/$USERNAME"

# 创建组
if ! getent group "$USERNAME" > /dev/null; then
  echo "创建组: $USERNAME (GID: $USER_GID)"
  groupadd -g "$USER_GID" "$USERNAME"
fi

# 创建用户
if ! id "$USERNAME" > /dev/null 2>&1; then
  echo "创建用户: $USERNAME (UID: $USER_UID, GID: $USER_GID)"
  useradd -m -u "$USER_UID" -g "$USER_GID" -s /bin/bash "$USERNAME"
  cp -rT /etc/skel "$HOME_DIR"
  chown -R "$USERNAME:$USERNAME" "$HOME_DIR"
else
  echo "用户 $USERNAME 已存在"
fi

# 显示用户信息
echo "当前用户信息:"
echo "  用户名: $USERNAME"
echo "  用户ID: $USER_UID"
echo "  组ID: $USER_GID"
echo "  主目录: $HOME_DIR"

# 设置环境变量
export HOME=$HOME_DIR
export NVM_DIR="$HOME_DIR/.nvm"
export PYENV_ROOT="$HOME_DIR/.pyenv"
export PATH="$NVM_DIR:$NVM_DIR/versions/node/bin:$PYENV_ROOT/bin:$PYENV_ROOT/shims:$PATH:$PATH"

echo "环境变量设置:"
echo "  HOME: $HOME"
echo "  NVM_DIR: $NVM_DIR"
echo "  PYENV_ROOT: $PYENV_ROOT"

# 为当前用户安装 nvm 和 pyenv（如果不存在）
if [ ! -d "$NVM_DIR" ]; then
  echo "为用户 $USERNAME 安装 nvm..."
  su "$USERNAME" -c "git clone https://gitee.com/milde/nvm.git $NVM_DIR"
fi

if [ ! -d "$PYENV_ROOT" ]; then
  echo "为用户 $USERNAME 安装 pyenv..."
  su "$USERNAME" -c "git clone https://gitee.com/milde/pyenv.git $PYENV_ROOT"
fi

# 确保 nvm 和 pyenv 目录所有者正确
if [ -d "$NVM_DIR" ]; then
  chown -R "$USERNAME:$USERNAME" "$NVM_DIR"
fi

if [ -d "$PYENV_ROOT" ]; then
  chown -R "$USERNAME:$USERNAME" "$PYENV_ROOT"
  # 确保 pyenv 的 shims 目录有写权限
  chmod -R 755 "$PYENV_ROOT"
fi

# 加载 nvm（如果已安装）
if [ -d "$NVM_DIR" ]; then
  echo "加载 nvm..."
  [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
  [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"
fi

# 加载 pyenv（如果已安装）
if [ -d "$PYENV_ROOT" ]; then
  echo "加载 pyenv..."
  eval "$(pyenv init -)"
  eval "$(pyenv init --path)"
fi

# 自动修复挂载目录的权限（在 root 环境中执行）
if [ -d "/app" ]; then
  echo "正在修复挂载目录 /app 的权限..."
  chown -R "$USERNAME:$USERNAME" /app
  # chmod -R 755 /app
  echo "权限修复完成"
fi

# 配置用户的环境文件以加载 nvm 和 pyenv（检测内容后追加）
BASH_PROFILE="$HOME_DIR/.bash_profile"
BASH_RC="$HOME_DIR/.bashrc"

# 检查并追加 nvm 配置到 .bash_profile
if [ ! -f "$BASH_PROFILE" ] || ! grep -q "NVM_DIR" "$BASH_PROFILE"; then
  cat >> "$BASH_PROFILE" << 'EOF'

# 加载 nvm
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"

# 加载 pyenv
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv init --path)"
EOF
  chown "$USERNAME:$USERNAME" "$BASH_PROFILE"
  chmod 644 "$BASH_PROFILE"
fi

# 检查并追加 nvm 配置到 .bashrc
if [ ! -f "$BASH_RC" ] || ! grep -q "NVM_DIR" "$BASH_RC"; then
  cat >> "$BASH_RC" << 'EOF'

# 加载 nvm
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"

# 加载 pyenv
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv init --path)"
EOF
  chown "$USERNAME:$USERNAME" "$BASH_RC"
  chmod 644 "$BASH_RC"
fi

# 复制初始化脚本到用户家目录（如果不存在）
INIT_SCRIPT="$HOME_DIR/init.sh"
if [ ! -f "$INIT_SCRIPT" ]; then
  echo "复制初始化脚本到用户家目录..."
  cp /home/dev/init.sh "$INIT_SCRIPT"
  chown "$USERNAME:$USERNAME" "$INIT_SCRIPT"
  chmod +x "$INIT_SCRIPT"
fi

# 执行用户的初始化脚本（可选）
if [ -x "$INIT_SCRIPT" ]; then
  echo "==> Running init.sh..."
  # 确保在用户环境中加载 nvm 和 pyenv，并修复权限
  su "$USERNAME" -c "chmod -R 755 $PYENV_ROOT && source $NVM_DIR/nvm.sh && source $INIT_SCRIPT"
fi

# 切换到用户执行传入命令，并加载环境配置
if [ $# -eq 0 ]; then
  # 如果没有传入命令，启动持久运行的 shell
  echo "容器已启动，等待连接..."
  echo "使用方法:"
  echo "  docker exec -it -u $USERNAME <container_name> bash"
  echo "  docker exec -it -u $USERNAME <container_name> nvm ls"
  exec gosu "$USERNAME" bash -c "export NVM_DIR=$NVM_DIR && export PYENV_ROOT=$PYENV_ROOT && source $NVM_DIR/nvm.sh && eval \"\$(pyenv init -)\" && tail -f /dev/null"
else
  # 如果有传入命令，加载环境后执行
  exec gosu "$USERNAME" bash -c "export NVM_DIR=$NVM_DIR && export PYENV_ROOT=$PYENV_ROOT && source $NVM_DIR/nvm.sh && eval \"\$(pyenv init -)\" && exec \"\$@\"" bash "$@"
fi
